package com.wang.springbootinit.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wang.springbootinit.model.dto.MakeupArrangeDTO;
import com.wang.springbootinit.model.dto.MakeupQueryDTO;
import com.wang.springbootinit.model.entity.Makeup;
import com.wang.springbootinit.model.vo.MakeupVO;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * 补考报名服务接口
 * 提供补考报名、安排和成绩管理等服务
 */
public interface MakeupService extends IService<Makeup> {
    /**
     * 提交补考报名
     * @param makeup 报名信息
     * @return 操作结果
     */
    boolean submitMakeup(Makeup makeup,HttpServletRequest request);
    
    /**
     * 安排补考
     * @param arrangeDTO 补考安排信息
     * @return 操作结果
     */
    boolean arrangeMakeup(MakeupArrangeDTO arrangeDTO);
    
    /**
     * 取消补考报名
     * @param makeupId 补考ID
     * @return 操作结果
     */
    boolean cancelMakeup(Long makeupId);
    
    /**
     * 分页查询补考信息
     * @param queryDTO 查询参数
     * @return 补考列表
     */
    Page<MakeupVO> getMakeupPage(MakeupQueryDTO queryDTO);
    
    /**
     * 查询学生的补考记录
     * @param studentId 学生ID
     * @return 补考记录列表
     */
    List<Makeup> getMyMakeups(Long studentId);
    
    /**
     * 获取补考详情
     * @param makeupId 补考ID
     * @return 补考详情
     */
    Makeup getMakeupById(Long makeupId);
    
    /**
     * 更新补考成绩
     * @param makeupId 补考ID
     * @param scoreId 成绩ID
     * @return 操作结果
     */
    boolean updateMakeupScore(Long makeupId, Long scoreId);

    List<MakeupVO> getCurrentList(HttpServletRequest request);

    /**
     * 分页获取补考申请列表
     * @param current 当前页码
     * @param pageSize 每页数量
     * @param studentId 学生ID（可选）
     * @param status 审核状态（可选）
     * @return 分页结果
     */
    Page<Makeup> listMakeupByPage(long current, long pageSize, Long studentId, Integer status);

    boolean audit(MakeupArrangeDTO arrangeDTO);
}